// 导入必要的 Java Swing 和 AWT 库
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

// ShapeDrawerGUI 类继承自 JFrame，用于创建图形用户界面
public class ShapeDrawer extends JFrame {
    // 定义一个 DrawArea 对象，用作绘图的主要区域
    private DrawArea drawArea = new DrawArea();

    // ShapeDrawerGUI 的构造函数
    public ShapeDrawer() {
        this.setSize(400, 400); // 设置窗口的初始大小
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置默认关闭操作，退出程序
        this.setTitle("图形绘制器"); // 设置窗口标题
        this.add(drawArea, BorderLayout.CENTER); // 将绘图区域添加到窗口的中央

        // 创建一个下拉列表（JComboBox），用于选择要绘制的图形类型
        JComboBox<String> shapeSelector = new JComboBox<>(new String[]{"正⽅形", "⻓⽅形", "圆形", "三⻆形"});
        this.add(shapeSelector, BorderLayout.NORTH); // 将下拉列表添加到窗口的北部（上方）

        // 为下拉列表添加事件监听器，以便在用户选择不同选项时做出响应
        shapeSelector.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取用户选择的项
                JComboBox cb = (JComboBox) e.getSource();
                String shapeName = (String) cb.getSelectedItem();

                int  size=0;
                boolean validInput = false;
                while(!validInput)
                {
                    String input = JOptionPane.showInputDialog(" 请输⼊ " + shapeName + " 的尺⼨ ");
                    try
                    {
                        size = Integer.parseInt(input);
                        validInput = true;
                    }
                    catch (NumberFormatException ex)
                    {
                        JOptionPane.showMessageDialog(null, " 输⼊⽆效，请输⼊⼀个整 数。 ");
                    }
                }

                // 根据选择更新绘图区域的当前图形，并重绘
                drawArea.setShape(shapeName,size);
            }
        });
    }

    // 主方法，程序的入口点
    public static void main(String[] args) {
        // 使用 SwingUtilities.invokeLater 来确保 GUI 的创建和更新在事件派发线程上执行
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                // 创建 ShapeDrawer 对象，并使窗口可见
                new ShapeDrawer().setVisible(true);
            }
        });
    }

    // DrawArea 类继承自 JPanel，用于自定义绘图逻辑
    private static class DrawArea extends JPanel {
        // 默认绘制的图形是正方形
        private String shape = "正⽅形";
        private int size = 100;
        // setShape 方法用于更新当前要绘制的图形
        public void setShape(String shape,int size) {
            this.shape = shape;
            this.size=size;
            this.repaint(); // 调用 repaint 方法来重绘面板
        }

        @Override
        // 重写 paintComponent 方法以实现自定义绘图逻辑
        protected void paintComponent(Graphics g) {
            // 调用父类的 paintComponent 方法进行默认的绘图操作
            super.paintComponent(g);

            // 根据当前选择的图形，使用 switch 语句绘制相应的图形
            switch (shape) {
                case "正⽅形":
                    // 绘制正方形
                    g.drawRect(50, 50, size, size);
                    break;
                case "⻓⽅形":
                    // 绘制长方形
                    g.drawRect(50, 50, size*2, size);
                    break;
                case "圆形":
                    // 绘制圆形
                    g.drawOval(50, 50, size, size);
                    break;
                case "三⻆形":
                    // 绘制三角形，需要定义顶点坐标
                    int[] xPoints = {50+size/2, 50, 50+size};
                    int[] yPoints = {50, 50+size, 50+size};
                    // 使用 drawPolygon 方法绘制多边形，这里是三角形
                    g.drawPolygon(xPoints, yPoints, 3);
                    break;
                default:
                    break;
            }
        }
    }
}